/*
******************************************************************************************************* 
**  Copyright (C) 2019, 苏州检易生物科技有限公司 
**  All rights reserved. 
** 
**  FileName:       	schedule.c
**  Description:	
**  Author:        	 
**  Version				v0.1
**  Date:           	2019-07-15
**	Function List： 
**  History:         
*********************************************************************************************************
*/


/*
*********************************************************************************************************
*                                              	调试开关
*********************************************************************************************************
*/


/*
*********************************************************************************************************
*                                             INCLUDE FILES
*********************************************************************************************************
*/
#include "schedule_task.h"
#include "work_task.h"
#include "temperature.h"
#include "ff.h"
/*
*********************************************************************************************************
*                                              	宏定义
*********************************************************************************************************
*/
#define		SCHEDULE_TASK_STK_SIZE				1024
#define		SCHEDULE_TASK_MB_SIZE					32

/*
*********************************************************************************************************
*                                              	结构体定义
*********************************************************************************************************
*/

 
/*
*********************************************************************************************************
*                                              	函数原型声明
*********************************************************************************************************
*/
static void schedule_task_init(void);

static void schedule_task_proc(void);

/*
*********************************************************************************************************
*                                              	全局变量定义
*********************************************************************************************************
*/
/*
*********************************************************************************************************
*                                              	模块静态变量定义
*********************************************************************************************************
*/
struct rt_thread   	rt_schedule_tcb;
struct rt_mailbox		rt_schedule_mb;											
static char									schedule_task_stk[SCHEDULE_TASK_STK_SIZE];
static char									schedule_task_name[]="schedule task\0";
static char									schedule_task_mb_pool[SCHEDULE_TASK_MB_SIZE * 4];

static uint32_t					m_tick_cnt;


/*
*********************************************************************************************************
*                                              	函数定义
*********************************************************************************************************
*/




/*
*********************************************************************************************************
*                                               本地函数声明
*********************************************************************************************************
*/
static void schedule_task_process(void* para);

static void sch_tmr_callback(void* p_tmr, void* p_arg);

static void sch_proc(uint32_t data);

static void sch_tmr_proc(uint32_t data);

/*
*********************************************************************************************************
*@brief:	
*********************************************************************************************************
*/


/*
*********************************************************************************************************
*					
*********************************************************************************************************
*/


void schedule_task_start(void)
{
	if(RT_EOK != rt_thread_init(&rt_schedule_tcb,
		schedule_task_name, 
		schedule_task_process,
		RT_NULL,
		schedule_task_stk,
		SCHEDULE_TASK_STK_SIZE,
		SCHEDULE_TASK_PRIO,
		RT_THREAD_TIME_SLICE))
	{
		Critical_Log("%s create failed!\r\n",schedule_task_name);
//		while(1){}
	}
	else
		rt_thread_startup(&rt_schedule_tcb);
}
static void schedule_task_init(void)
{
	/*创建消息邮箱*/
	if(RT_EOK != rt_mb_init(&rt_schedule_mb,
		"schedule mailbox",
		schedule_task_mb_pool,
		SCHEDULE_TASK_MB_SIZE,
		RT_IPC_FLAG_FIFO
		))
	{
		Critical_Log("%s create failed!\r\n",schedule_task_name);
	}
//	/*注册硬件timer*/
//	bsp_timer_callback_register(&TIM_1K,schedule_time_tick);



}

static void schedule_task_process(void* para)
{
	app_msg_t *p_msg = NULL;
	rt_err_t err;
	
	schedule_task_init();

	static uint32_t tmr_cnt = 0;
	while(1)
	{
		if(RT_EOK != rt_mb_recv(&rt_schedule_mb,(rt_uint32_t*)&p_msg,RT_WAITING_FOREVER)
			|| p_msg == NULL)
		{
			p_msg = NULL;
			continue;
		}
		switch(p_msg->event)
		{
			case MSG_SCHEDULE_SCH:
				sch_proc(p_msg->data);
				break;
			case MSG_SCHEDULE_TMR:
				sch_tmr_proc(p_msg->data);
//				tmr_cnt += SCHEDULE_TICK_MS;
//				if(tmr_cnt % PERIOD_UPLOAD_INTERVAL == 0)
//					system_period_upload();
				break;
			default:
				break;
		}
		app_msg_free(p_msg);
	}	
}
static void sch_tmr_proc(uint32_t time_ms)
{
}

static void schedule_time_tick(hw_timer_t * handle)
{
	if(handle->cnt%SCHEDULE_TICK_MS==0)
		app_msg_send(MSG_SCHEDULE_TMR, handle->cnt, &rt_schedule_mb);
}

